A virtual machine provides an environment in which an operating system may execute with apparent control of a dedicated physical machine. Multiple virtual machines may execute on a common hardware machine, and each virtual machine may operate with protection and isolation from other virtual machines executing on the same common hardware machine. Each virtual machine typically encapsulates a complete executing state for a corresponding operating system, including both user-level applications and kernel-mode operating system services.
In many computing environments, each hardware machine is typically underutilized on average when executing a corresponding server application. As a result of average hardware underutilization over many hardware machines, computing environments configured to dedicate a hardware machine to each server application are typically characterized as being very inefficient with respect to cost, power consumption, management, and potentially reliability.
Virtual machines are advantageously deployed to consolidate multiple software servers in a computing environment onto one or more shared hardware machines for execution. A hypervisor is a software layer that virtualizes hardware resources, and presents a virtual hardware interface to one or more virtual machine instances that may reflect an underlying hardware machine architecture or an abstraction of an arbitrary machine architecture. The hypervisor may perform certain management functions with respect to an executing virtual machine. For example, the hypervisor may take a snapshot of an encapsulated state for an executing virtual machine, and the hypervisor may use a snapshot to restore execution of a virtual machine. The snapshot may be used for various purposes, such as recovering from a machine fault, or migrating an executing process from one hardware machine to another hardware machine in response to resource availability on each hardware machine.
Each virtual machine executing on a hardware machine includes a memory image of apparent physical memory. Because virtual machines tend to have working sets that are smaller than configured memory for the virtual machine, hardware machine memory may be efficiently overcommitted for many applications. For example, a hardware machine with four gigabytes of total machine memory may host a set of virtual machines that have a total of sixteen gigabytes of apparent configured physical memory. While approximately four gigabytes of machine memory are actually available at any one time, this four gigabytes of machine memory can be used by the set of virtual machines in a multiplexed manner by demand-paging to a file residing in an attached mass storage system. The mass storage system conventionally comprises one or more magnetic hard disk drives; however any form of mass storage system may be used. For example, in modern computer systems the mass storage system may comprise a solid-state drive (SSD) or an array of SSDs. Page sharing and ballooning, among various techniques, may be employed to reduce demand paging and enhance overall efficiency. Each saved or retrieved snapshot is also conventionally stored to the mass storage system. As such, when the hypervisor executes a save operation or a restore operation, an entire memory image for the corresponding virtual machine is conventionally stored to or retrieved from a relatively slow storage media, diminishing overall system performance.